package com.naiterui.ehp.bs.doctor.dao.mongo;

import com.google.common.collect.Lists;
import com.naiterui.ehp.bs.doctor.vo.DrShieldVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

/**
 * 用于处理医生APP中IM相关的设置持久化信息获取的操作
 * 例如:获取医生对患者的勿扰屏蔽状态等
 *
 * @author zhouyanxin
 * @since 1.0.0
 */
@Repository
public class AdImSetupDao extends MongoBaseDao {

    /**
     * 医生屏蔽患者的collectionName
     */
    private static final String COLLECTION_NAME = "m_shield";

    /**
     * IM相关数据库持久化模板对象
     */
    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * 重写父类方法
     * 返回IM相关数据库持久化模板对象
     *
     * @return
     *
     * @Author zhouyanxin
     * @Date 2015年12月4日
     * @see MongoBaseDao#getMongoTemplate()
     * @since 1.0.0
     */
    @Override
    protected MongoTemplate getMongoTemplate() {
        return this.mongoTemplate;
    }

    /**
     * 获取指定医生屏蔽的患者Id
     * IMSetupDao.getDrShieldPatientIds()
     *
     * @param doctorId
     *
     * @return
     *
     * @Author zhouyanxin
     * @Date 2015年12月4日
     * @since 1.0.0
     */
    public List<Long> getDrShieldPatientIds(Long doctorId) {
        // 查询指定医生屏蔽患者的Id
        Query query = Query.query(Criteria.where("userId").is(doctorId));
        List<DrShieldVO> shieldVOS = this.mongoTemplate.find(query, DrShieldVO.class, COLLECTION_NAME);
        return Optional.ofNullable(shieldVOS).orElse(Lists.newArrayList()).stream().map(DrShieldVO::getShieldId).collect(Collectors.toList());
    }
}
